#ifndef __AI_RECOGNITION_H__
#define __AI_RECOGNITION_H__

#include <opencv2/opencv.hpp>
#include <QString>
#include <QList>
#include <QDateTime>

#include "inference.h"

struct SubtitleItem {
    QDateTime timestamp;  // 时间格式："00:00:10.000"
    QString content;    // 字幕文本
    QString rawTimestamp;
};

struct AIAction {
    QString action;            // 动作名称或描述
    cv::Mat image;              // 图像
    std::vector<DL_RESULT> results;  // AI识别的结果
};

class AIRecogManager {
public:
    // TODO: 对资源加锁
    // 获取单例实例
    static AIRecogManager& getInstance() {
        static AIRecogManager instance; // 局部静态变量，程序结束时自动销毁
        return instance;
    }

    // 添加识别到的音频
    void addAudioRecognition(SubtitleItem item);

    // 获取指定时间段内的识别到的音频信息
    QList<SubtitleItem> getAudioRecognitions(QDateTime startTime, QDateTime endTime);

    // 添加AI识别行为（如识别到的对象、动作等）
    void addAIAction(QDateTime timestamp, const QString& action, const cv::Mat& image, const std::vector<DL_RESULT>& results);

    // 获取指定时间段内的AI识别行为
    QList<AIAction> getAIActions(QDateTime startTime, QDateTime endTime);

private:
    // 私有构造函数，防止外部实例化
    AIRecogManager() {}

    // 私有拷贝构造函数和赋值操作符，防止拷贝实例
    AIRecogManager(const AIRecogManager&) = delete;
    AIRecogManager& operator=(const AIRecogManager&) = delete;

    QList<SubtitleItem> audioRecognitions;
    QList<AIAction> aiActions;
};

#endif // __AI_RECOGNITION_H__
